#ifndef MYOS_MEMORY_H
#define MYOS_MEMORY_H

#include <myOs/types.h>

#define PAGE_SIZE 0x1000        // 一页的大小 4K
#define MEMORY_BASE 0x100000    // 1M， 可用内存开始的位置

typedef struct page_entry_t
{
    u8 present : 1;     // 在内存中
    u8 write : 1;       // 0 只读 1 可读可写
    u8 user : 1;        // 1 所有人 0 超级用户 DPL < 3
    u8 pwt : 1;         // page write through 1 直写模式， 0 回写 模式
    u8 pcd : 1;         // page cache disable 禁止该页缓存
    u8 accessed : 1;    // 被访问过， 用于统计使用频率
    u8 dirty : 1;       // 脏页，表示该页缓冲被写过
    u8 pat : 1;         // page attribute table 页大小 4k/4M
    u8 global : 1;      // 全局， 所选进程动用到了，该页不新缓冲
    u8 ignored : 3;     // 忽略
    u32 index : 20;     // 页索引
} _packed page_entry_t;

u32 get_cr3();
void set_cr3(u32 pde);

#endif